/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.service;

import com.model.domain.proceso.envio.carga.LogXmlCargado;
import com.model.domain.proceso.envio.carga.ProcesoCarga;
import com.model.domain.proceso.envio.subida.LogXmlTransferido;
import com.model.domain.proceso.envio.subida.xml.TipoArchivoXmlEnaho;
import com.model.domain.ubicacion.ViviendaXmlTransferido;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import util.www.jdbc.JdbcUtil;
import util.log.MiLogger;

/**
 * @author Rdelacruz
 */
public class LogXmlCargadoService 
extends AbstractService
{   
    
    private ControlEnvioHogarService controlEnvioHogarService;
    private LogXmlTransferidoService logXmlTransferidoService;
    private LogXmlCargadoErrorService logXmlCargadoErrorService;
    private ViviendaXmlTransferidoService viviendaXmlTransferidoService;
    private DataXmlCampoService dataXmlCampoService;
        
  
    public void save(Connection con, MiLogger logger, LogXmlCargado logXmlCargado) throws Exception {   
        PreparedStatement ps = null;
        try {
            //TABLA CARGA
            String sql = "insert into Envios_logxmlcargados (id_envio,tipocarga,fechacargaxml,usuario) "
                    + " values(?,?,GETDATE(),?)";
            ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            //ps = con.prepareStatement(sql);
            
            ProcesoCarga proc = logXmlCargado.getProcesoCarga();
            LogXmlTransferido logxml = logXmlCargado.getLogXmlTransferido();
            
            ps.setInt(1, logxml.getId());
            ps.setString(2, proc.getTipo().getCodigo());
            ps.setString(3, proc.getUsuario());
            
            ps.executeUpdate();
            
            int id = JdbcUtil.getIdGeneradoInt(ps);
            logXmlCargado.setId(id);
            
            
            
            /*
            //Para setear la fecha de logXmlCargado            
            st = con.createStatement();
            ResultSet rs = st.executeQuery("select fechacargaxml from Envios_logxmlcargados where id="+id);
            if(rs.next()) {
                logXmlCargado.setFechaCarga(rs.getDate(1));
            }
            */
            
            
            ViviendaXmlTransferido controlVivienda = logXmlCargado.getViviendaParaCargar();
            if(controlVivienda!=null) {
                viviendaXmlTransferidoService.updateUltimaCarga(con, logXmlCargado, controlVivienda.getResultadoUltimaCarga());
            }
            
            if(logxml.getArchivoXmlEnaho().getTipo()==TipoArchivoXmlEnaho.CAMPO) {                
                controlEnvioHogarService.save(con, logger, logXmlCargado);
            }
            
            logXmlTransferidoService.updateFlagProcesoCarga(con, logxml, 1);
            
            logXmlTransferidoService.deleteArchivo(con, logxml);
                    
        }
        finally {
            if(ps!=null) ps.close();
        }
    }

    public ControlEnvioHogarService getControlEnvioHogarService() {
        return controlEnvioHogarService;
    }

    public void setControlEnvioHogarService(ControlEnvioHogarService controlEnvioHogarService) {
        this.controlEnvioHogarService = controlEnvioHogarService;
    }

    public LogXmlTransferidoService getLogXmlTransferidoService() {
        return logXmlTransferidoService;
    }

    public void setLogXmlTransferidoService(LogXmlTransferidoService logXmlTransferidoService) {
        this.logXmlTransferidoService = logXmlTransferidoService;
    }

    public LogXmlCargadoErrorService getLogXmlCargadoErrorService() {
        return logXmlCargadoErrorService;
    }

    public void setLogXmlCargadoErrorService(LogXmlCargadoErrorService logXmlCargadoErrorService) {
        this.logXmlCargadoErrorService = logXmlCargadoErrorService;
    }

    public ViviendaXmlTransferidoService getViviendaXmlTransferidoService() {
        return viviendaXmlTransferidoService;
    }

    public void setViviendaXmlTransferidoService(ViviendaXmlTransferidoService viviendaXmlTransferidoService) {
        this.viviendaXmlTransferidoService = viviendaXmlTransferidoService;
    }

    public DataXmlCampoService getDataXmlCampoService() {
        return dataXmlCampoService;
    }

    public void setDataXmlCampoService(DataXmlCampoService dataXmlCampoService) {
        this.dataXmlCampoService = dataXmlCampoService;
    }

 
    
    
}
